home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- ''' Standard "encodings" Package
-
- Standard Python encoding modules are stored in this package
- directory.
-
- Codec modules must have names corresponding to normalized encoding
- names as defined in the normalize_encoding() function below, e.g.
- \'utf-8\' must be implemented by the module \'utf_8.py\'.
-
- Each codec module must export the following interface:
-
- * getregentry() -> codecs.CodecInfo object
- The getregentry() API must a CodecInfo object with encoder, decoder,
- incrementalencoder, incrementaldecoder, streamwriter and streamreader
- atttributes which adhere to the Python Codec Interface Standard.
-
- In addition, a module may optionally also define the following
- APIs which are then used by the package\'s codec search function:
-
- * getaliases() -> sequence of encoding name strings to use as aliases
-
- Alias names returned by getaliases() must be normalized encoding
- names as defined by normalize_encoding().
-
- Written by Marc-Andre Lemburg (mal@lemburg.com).
-
- (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
-
- '''
- import codecs
- from encodings import aliases
- import __builtin__
- _cache = { }
- _unknown = '--unknown--'
- _import_tail = [
- '*']
- _norm_encoding_map = ' . 0123456789 ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz '
- _aliases = aliases.aliases
-
- class CodecRegistryError(LookupError, SystemError):
- pass
-
-
- def normalize_encoding(encoding):
- """ Normalize an encoding name.
-
- Normalization works as follows: all non-alphanumeric
- characters except the dot used for Python package names are
- collapsed and replaced with a single underscore, e.g. ' -;#'
- becomes '_'. Leading and trailing underscores are removed.
-
- Note that encoding names should be ASCII only; if they do use
- non-ASCII characters, these must be Latin-1 compatible.
-
- """
- if hasattr(__builtin__, 'unicode') and isinstance(encoding, unicode):
- encoding = encoding.encode('latin-1')
-
- return '_'.join(encoding.translate(_norm_encoding_map).split())
-
-
- def search_function(encoding):
- entry = _cache.get(encoding, _unknown)
- if entry is not _unknown:
- return entry
- norm_encoding = normalize_encoding(encoding)
- if not _aliases.get(norm_encoding):
- pass
- aliased_encoding = _aliases.get(norm_encoding.replace('.', '_'))
- if aliased_encoding is not None:
- modnames = [
- aliased_encoding,
- norm_encoding]
- else:
- modnames = [
- norm_encoding]
- for modname in modnames:
- if not modname or '.' in modname:
- continue
-
-
- try:
- mod = __import__('encodings.' + modname, fromlist = _import_tail, level = 0)
- except ImportError:
- continue
-
- else:
- mod = None
-
- try:
- getregentry = mod.getregentry
- except AttributeError:
- mod = None
-
- if mod is None:
- _cache[encoding] = None
- return None
- entry = getregentry()
- _cache[encoding] = entry
-
- try:
- codecaliases = mod.getaliases()
- except AttributeError:
- None if not isinstance(entry, codecs.CodecInfo) else mod is None
- None if not isinstance(entry, codecs.CodecInfo) else mod is None
- except:
- None if not isinstance(entry, codecs.CodecInfo) else mod is None
-
- for alias in codecaliases:
- if not _aliases.has_key(alias):
- _aliases[alias] = modname
- continue
- None if not isinstance(entry, codecs.CodecInfo) else mod is None
-
- return entry
-
- codecs.register(search_function)
-